package funcionario;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;

import exception.FuncionarioExistenteException;
import exception.FuncionarioInexistenteException;

public class RepositorioFuncionariosMap implements IRepositorioFuncionarios {
	
	private Map<Integer,Funcionario> funcionariosMap = 
		  new HashMap<Integer, Funcionario>();

	@Override
	public void atualizar(Funcionario funcionario) throws FuncionarioInexistenteException {
		if ( existe ( funcionario.getMatricula() ) ) {
			funcionariosMap.put(funcionario.getMatricula(), funcionario);
		} else {
			throw new FuncionarioInexistenteException( funcionario.getMatricula() );
		}
	}

	@Override
	public boolean existe( Integer matricula ) {
		return funcionariosMap.containsKey( matricula );
	}

	@Override
	public void inserir(Funcionario novoFuncionario) 
		throws FuncionarioExistenteException {
		if (!existe(novoFuncionario.getMatricula())) {
			funcionariosMap.put(novoFuncionario.getMatricula(), novoFuncionario);
			System.out.println("Funcionario Cadastrado");
		} else {
			throw new FuncionarioExistenteException( novoFuncionario.getMatricula() );
		}		
	}

	@Override
	public Funcionario procurar( Integer matricula ) throws FuncionarioInexistenteException {
		Funcionario ret = funcionariosMap.get( matricula );
		if (ret == null) {
			throw new FuncionarioInexistenteException( matricula );
		}
		return ret;
	}

	@Override
	public void remover( Integer matricula ) throws FuncionarioInexistenteException {
		if ( existe( matricula ) ) {
			funcionariosMap.remove( matricula );
		} else {
			throw new FuncionarioInexistenteException( matricula );
		}
	}
	
	@Override
	public Vector<Funcionario> listar()  {
		return null;
	}

	public Iterator<Funcionario> todosDados(){
		return funcionariosMap.values().iterator();
	}
	
}

